package facade;




import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import servicios.ServicioArticulo;
import servicios.ServicioVenta;
import vo.ArticuloVO;
import vo.CarritoVO;
import vo.ConfiguracionVO;
import vo.ElectrodomesticoVO;
import vo.InfantilVO;
import vo.ModaVO;
import vo.MuebleVO;
import vo.VentaVO;
import ejb.AdministradorBestSeller;
import ejb.AdministradorCarrito;
import ejb.AdministradorConfiguracion;
import entities.Articulo;
import entities.Configuracion;
import entities.Electrodomestico;
import entities.Infantil;
import entities.Moda;
import entities.Mueble;
import entities.Venta;
import exceptions.LogNOKException;
import exceptions.VentaNOKException;

@Stateless
public class FacadeBean implements Facade{
	
	@EJB
	private ServicioArticulo servicioArticulo;
	
	@EJB
	private AdministradorBestSeller adminBestSeller;

	@EJB
	private AdministradorCarrito adminCarrito;
	
	@EJB
	private ServicioVenta servicioVenta;
	
	@EJB
	private AdministradorConfiguracion adminConfig;
	
	@Override
	public void nuevoArticuloElectrodomestico(Electrodomestico entidad) {
		servicioArticulo.guardarArticuloElectrodomesticos(entidad);
	}

	@Override
	public void nuevoArticuloMueble(Mueble entidad) {
		servicioArticulo.guardarArticuloMuebles(entidad);
		
	}

	@Override
	public void nuevoArticuloModa(Moda entidad) {
		servicioArticulo.guardarArticuloModa(entidad);
		
	}

	@Override
	public void nuevoArticuloInfantil(Infantil entidad) {
		servicioArticulo.guardarArticuloInfantil(entidad);
		
	}

	@Override
	public boolean actualizarRanking(String json) {
		if (json != null){
			adminBestSeller.actualizarRanking(json);
			return true;
		}else{
			return false;
		}
		
	}

	@Override
	public boolean iniciarSesion(String usuario, String password) {
		return adminCarrito.iniciarSesion(usuario, password);		
	}

	@Override
	public void confirmarCarrito() throws VentaNOKException, LogNOKException {
		adminCarrito.confirmarCarrito();		
	}	
	
	public List<VentaVO> getVentas(){
		return servicioVenta.getVentas();
	}
	

	@Override
	public void updateConfiguracion(ConfiguracionVO c) {
		adminConfig.actualizarConfiguracion(c);
	}

	@Override
	public List<ConfiguracionVO> obtenerConfiguraciones() {
		List<Configuracion> configs = adminConfig.obtenerConfiguraciones();
		List<ConfiguracionVO> configuracionesVO = new ArrayList<ConfiguracionVO>();
		for (Configuracion configuracion : configs) {
			configuracionesVO.add(configuracion.toConfiguracionVO());
		}
		return configuracionesVO;
	}

	@Override
	public ConfiguracionVO obtenerConfiguracionSeleccionada(int id) {
		return adminConfig.obtenerConfiguracionSeleccionada(id).toConfiguracionVO();
	}

	@Override
	public List<ArticuloVO> getArticulos() {

		List<Articulo> articulos = servicioArticulo.buscarArticulos();
		List<ArticuloVO> articulosVO = new ArrayList<ArticuloVO>();
		
		for(Articulo a: articulos){
			articulosVO.add(a.getVO());
		}
		
		return articulosVO;
		
	}

	@Override
	public ElectrodomesticoVO getElectrodomestico(int codigo) {
		return servicioArticulo.buscarElectrodomestico(codigo).getVO();
	}

	@Override
	public InfantilVO getInfantil(int codigo) {
		return servicioArticulo.buscarInfantil(codigo).getVO();
	}

	@Override
	public ModaVO getModa(int codigo) {
		return servicioArticulo.buscarModa(codigo).getVO();
	}

	@Override
	public MuebleVO getMueble(int codigo) {
		return servicioArticulo.buscarMueble(codigo).getVO();
	}

	@Override
	public void agregarAlCarrito(int codigo, int cantidad) {
		Articulo articulo = servicioArticulo.buscarArticulo(codigo);
		adminCarrito.agregarArticuloCarrito(articulo, cantidad);
		
	}

	public List<ArticuloVO> buscarArticulo(int codigo, String nombre, String descripcion, String marca, String origen){
		List<Articulo> articulos = adminCarrito.buscarArticulo(codigo, nombre, descripcion, marca, origen);
		List<ArticuloVO> articulosvo = new ArrayList<ArticuloVO>();
		if(!articulos.isEmpty()){
			for(Articulo a:articulos){
				articulosvo.add(a.getVO());
			}
		}
		return articulosvo;
	}

	@Override
	public List<ArticuloVO> buscarMueble(int codigo, String nombre,
			String descripcion, String marca, String origen) {
		List<Articulo> articulos = adminCarrito.buscarMueble(codigo, nombre, descripcion, marca, origen);
		List<ArticuloVO> articulosvo = new ArrayList<ArticuloVO>();
		if(!articulos.isEmpty()){
			for(Articulo a:articulos){
				articulosvo.add(a.getVO());
			}
		}
		return articulosvo;
	}

	@Override
	public List<ArticuloVO> buscarModa(int codigo, String nombre,
			String descripcion, String marca, String origen) {
		List<Articulo> articulos = adminCarrito.buscarModa(codigo, nombre, descripcion, marca, origen);
		List<ArticuloVO> articulosvo = new ArrayList<ArticuloVO>();
		if(!articulos.isEmpty()){
			for(Articulo a:articulos){
				articulosvo.add(a.getVO());
			}
		}
		return articulosvo;
	}

	@Override
	public List<ArticuloVO> buscarInfantil(int codigo, String nombre,
			String descripcion, String marca, String origen) {
		List<Articulo> articulos = adminCarrito.buscarInfantil(codigo, nombre, descripcion, marca, origen);
		List<ArticuloVO> articulosvo = new ArrayList<ArticuloVO>();
		if(!articulos.isEmpty()){
			for(Articulo a:articulos){
				articulosvo.add(a.getVO());
			}
		}
		return articulosvo;
	}

	@Override
	public List<ArticuloVO> buscarElectrodomestico(int codigo,
			String nombre, String descripcion, String marca, String origen) {
		List<Articulo> articulos = adminCarrito.buscarElectrodomestico(codigo, nombre, descripcion, marca, origen);
		List<ArticuloVO> articulosvo = new ArrayList<ArticuloVO>();
		if(!articulos.isEmpty()){
			for(Articulo a:articulos){
				articulosvo.add(a.getVO());
			}
		}
		return articulosvo;
	}

	@Override
	public void sacarArticuloCarrito(int codigo) {
		
		adminCarrito.sacarArticuloCarrito(codigo);
		
	}

	@Override
	public void cambiarCantidadArticuloCarrito(int codigo, int cantidad) {

		adminCarrito.cambiarCantidad(codigo, cantidad);
		
	}

	@Override
	public CarritoVO getCarrito() {
		return adminCarrito.getCarrito().getVO();
	}

	@Override
	public List<VentaVO> getVentasUsuario() {
		List<VentaVO> ventasVo = new ArrayList<VentaVO>();
		List<Venta> ventas = adminCarrito.getVentas();
		for(Venta v:ventas){
//			ventasVo.add();
		}
		return null;
	}
}
